03 - Filtracja

Wprowadzenie do przetwarzania obrazów

Politechnika Poznańska, Instytut Robotyki i Inteligencji Maszynowej

Ćwiczenie laboratoryjne 3: Filtracja

Powrót do spisu treści ćwiczeń laboratoryjnych

Ciekawostka - historia zdjęcia Lenna:

http://en.wikipedia.org/wiki/Lenna

Filtracja obrazów

W przetwarzaniu obrazów występują dwa główne rodzaje szumu:

Operacją, która może pozwolić na usunięcie szumu z obrazu jest operacja filtracji. Filtracja jest operacją, która bierze pod uwagę otoczenie (sąsiedztwo) piksela, dla którego jest wykonywana. Wszystkie elementy w jego sąsiedztwie są przemnażane przez odpowiadające im współczynniki filtra, a suma tych wartości jest zapisywana jako zaktualizowana wartość piksela, który był filtrowany. Jest to tzw. konwolucja 2D.

Liniowe filtry wygładzające - filtr uśredniający

Najprostszym sposobem usunięcia szumu, który równomiernie oscyluje pod i nad ‘prawdziwą’ wartością funkcji obrazowej jest lokalne uśrednianie po pewnym obszarze. Uśrednianie może być realizowane przy wykorzystaniu maski prostokątnej lub kołowej, np.:

Rezultatem splotu z takim filtrem będzie obraz o mniejszym natężeniu szumu, lecz również o mniejszej ostrości.

Liniowe filtry wygładzające - filtr gaussowski

Poprawę jakości wygładzania można uzyskać poprzez zastosowanie uśredniania ważonego odległością od środka filtru. Jedną z takich metod jest filtracja wygładzającym filtrem gaussowskim. Poszczególne elementy jądra filtru o rozmiarze \(2k + 1 × 2k + 1\) są określane zgodnie ze wzorem:

\[ H(i, j)= \frac{1}{2 \pi \sigma ^ {2}} \exp - \Bigg( \frac{(i-k-1) ^ {2} + (j-k-1) ^ {2}}{2 \sigma ^ {2}} \Bigg) \]

Rezultat filtracji zależy od wybranego \(\sigma\) :

Nieliniowe filtry wygładzające - filtr medianowy

Podstawową wadą filtrów liniowych jest rozmywanie krawędzi na obrazie. Aby tego uniknąć konieczne jest zastosowanie filtrów nieliniowych. Jednym z takich filtrów jest filtr medianowy. Zastosowanie tego filtru polega na przypisaniu pikselowi wartości będącej medianą w pewnym sąsiedztwie. Filtr ten nadaje się szczególnie do usuwania niewielkich artefaktów (np. szumu “pieprz i sól”).

Uwaga:
W OpenCV powyższe operacje filtrowania zostały zaimplementowane pod nazwami cv2.blur(), cv2.medianBlur() oraz cv2.GaussianBlur(). Więcej informacji znajdziesz w dokumentacji: https://docs.opencv.org/5.x/d4/d13/tutorial_py_filtering.html.

💥 Zadanie do wykonania 💥

Operacje morfologiczne

💥 Zadanie do wykonania 💥

Zapoznaj się z operacjami morfologicznymi: https://docs.opencv.org/5.x/d9/d61/tutorial_py_morphological_ops.html. A następnie:

Skanowanie obrazu

OpenCV zawiera bardzo dużo gotowych, zoptymalizowanych funkcji operujących na obrazach, jednak w niektórych, stosunkowo rzadkich, przypadkach niezbędne jest operowanie bezpośrednio na obrazie i jego pikselach. Można to zrealizować korzystając z pętli for. Szerokość, wysokość oraz liczbę kanałów (dla obrazów kolorowych) można uzyskać wywołując własność shape. Następnie iterujemy po szerokości, wysokości i (ewentualnie) liczbie kanałów.

💥 Zadanie do wykonania 💥

Zadania do samodzielnej realizacji

💥 Zadanie do wykonania 💥

W powyższym zadaniu, piksele “na obramowaniu” obrazu zostały pominięte. Zapoznaj się z innymi sposobami przetwarzania pikseli na jego brzegach: https://docs.opencv.org/5.x/d2/de8/group__core__array.html#ga209f2f4869e304c82d07739337eae7c5

💥 Zadanie do wykonania 💥

Napisz funkcję implementującą filtr Kuwahary (do obliczeń dla wygody wykorzystać można funkcję meanStdDev).

Czym jest filtr Kuwahary? Jest on innym przykładem filtru zachowującego krawędzie. Może być on określony dla różnych kształtów okna, jednak najczęściej przyjmuje się okno kwadratowe o długości boku równej \(2L + 1\) gdzie \(L\) jest liczbą całkowitą. Okno jest dzielone na 4 części jak na rysunku:

Dla każdej części określana jest wariancja i wartość średnia. Pikselowi bazowemu (środkowemu) przypisywana jest wartość średnia z obszaru o najmniejszej wariancji.